perm filename STTGET[K17,SYS] blob sn#086430 filedate 1974-02-13 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	title STTGET
C00011 ENDMK
C⊗;
title STTGET
subttl Statistics gathering service

nbufs←←3	; Number of buffers

INIBYT←←(11+1)/2;11 BYTES PER JOB 18 BITS PER BYTE

;JOB TABLE POINTERS FOR INTIALIZING STATS
JOBN←←400222
JBTSTS←←400210
	JNA←←40000
	SWP←←2000
JBTADR←←400223
JOBQUE←←400231
JBTSIN←←400307
JBTGLU←←400310
SPWGO←←400213
SP2GO←←400230
JOBNAM←←400225
JBTSWP←←400212

DEFINE XD(A,B)
<A←←B>

;STAT OP-CODES
XD CSZSTA,000000		;BYTE(1)0(3)0(8)HIGH ORDER BITS OF CORE SIZE(6)J#
XD CPSSTA,040000		;BYTE(1)0(3)1(8)HIGH ORDER BITS OF CORE POSITION(6)J#
XD NAMSTA,400000		;BYTE(1)1(5)0(6)UNUSED(6)J#
				;FOLLOWING TWO 18 BIT BYTES ARE JOBNAME
XD QUESTA,410000		;BYTE(1)1(5)1(6)QUEUE CODE(6)J#
XD SINSTA,420000		;BYTE(1)1(5)2(6)JBTSIN BIT #(6)J#
XD SEGSTA,430000		;BYTE(1)1(5)3(6)SEGMENT #(6)J#
XD SPWSTA,440000		;BYTE(1)1(5)4(6)0-17:TICS OF SPW, 77:SPW OFF(6)J#
XD GLUSTA,450000		;BYTE(1)1(5)5(6)JBTGLU COUNT(6)J#
XD LOKSTA,460000		;BYTE(1)1(5)6(6)1:LOCKING, 0:UNLOCKING(6)J#

stat←←400241		; Address of statistics table
sttlen←←400243		; Length of such
sttptr←←400244		; Address of statistics pointer
sttnum←←400245		; Address of wrap-around COUNTER

t←←12
t1←←13
t2←←14
T3←15
T4←16
J←17

external jobapr

START:	RESET
	MOVSI T,376001			;128K CORE STARTING AT BOTTOM (WRITE PROTECTED)
	SETPR2 T,			;SET IT AS UPPER
	JRST [	OUTSTR[ASCIZ/SETPR2 FAILED!
/]
		EXIT]
	SKIPN STAT
	JRST [	OUTSTR[ASCIZ/SORRY, THIS SYSTEM DOESN'T HAVE ANY STATISTICS INFO!
/]
		EXIT]
	init 1,17
	sixbit /DSK/
	0
	jrst [	outstr [asciz ⊗Can't INIT disk
⊗]
		EXIT]
	setzm efile+3
	hllzs efile+1
	setzm efile+2
	enter 1,efile
	jrst [	outstr [asciz ⊗Can't ENTER file
⊗]
		EXIT]
	hrrzi t,ints
	movem t,jobapr
	setzm nbufo
	movei t,buff
	movem t,iptr
	movem t,optr
	setzm lose
FOR @! I IN(JBTSTS,JBTADR,JOBQUE,JBTSIN,JBTGLU,SPWGO,SP2GO,JOBNAM,JBTSWP)
<	MOVE T,I
	ADDI T,400000
	HRRM T,$!I
>
	SETOM FIRST#
TRYINI:	MOVE T,JOBN
	SUBI T,1
	IMULI T,INIBYT
	ADD T,JOBFF↑
	CORE T,
	JRST [	OUTSTR[ASCIZ/CAN'T GET CORE FOR INITIALIZATION!
/]
		CALLI 1,12
		JRST TRYINI]
	MOVE T,JOBFF
	SETZM (T)
	MOVE T1,T
	HRL T,T
	ADDI T,1
	MOVE T1,JOBN
	SUBI T1,1
	IMULI T1,INIBYT
	ADD T1,JOBFF
	BLT T,(T1)
	PJOB T1,
	MOVEM T1,JOB#
	HRLZM T1,@JOBFF
	LOCK T,
	movei t2,1
	INTENB T2,
	IWKMSK [1]
	clkint 1,1		;EVERY TIC ON PDP-10
	IWAIT			;WAIT FOR INITIALIZATION TO FINISH
	MOVN T,JOBN
	ADDI T,1
	IMULI T,INIBYT
	SUBI T,1
	HRLZ T,T
	HRR T,JOBFF
	SUBI T,1
	SETZ T1,
	OUTPUT 1,T
loop:	INCHRS T
	JRST LOOP0
	EXIT

LOOP0:	MTAPE 1,['GODMOD'
		17]		;MAKE SURE FILE IS UPDATED
	IWAIT
loop1:	skipg t,nbufo
	jrst loop
	sos nbufo
	caile t,nbufs
	jrst [	outchr ["X"]
		output 1,[iowd 200,mones↔0]
		jrst loop2]
	hrrz t,optr
	subi t,1
	hrrm t,oiowd
	output 1,oiowd
loop2:	movei t,200
	addb t,optr
	caige t,buff+nbufs*200
	jrst loop1
	movei t,buff
	movem t,optr
	jrst loop1

INTS:	SKIPN FIRST
	JRST INTS1
	SETZM FIRST
	MOVE T2,JOBFF
	HRLI T2,(<POINT 18,0,17>);SKIP OVER OUR JOB #
	MOVEI J,1
INI0:
$JBTSTS:MOVE T1,JBTSTS(J)
	CAME J,JOB		;SKIP US
	TLNN T1,JNA
	JRST INI1
	TLNE T1,SWP
	TDZA T,T
$JBTADR:HRRZ T,JBTADR(J)
	LSH T,-4
	TRO T,CPSSTA(J)
	IDPB T,T2
	HLRZ T,@$JBTADR
	LSH T,-=10
	ADDI T,1
	TLNE T1,SWP
	LDB T,$JBTSWP
	LSH T,6
	TRO T,CSZSTA(J)
	IDPB T,T2
$JBTSIN:HLLZ T,JBTSIN(J)
	JRST INI2
$JBTSWP:POINT 8,JBTSWP(J),35	;IMGIN

INI3:	MOVN T3,T1
	MOVSI T4,400000
	LSH T4,(T3)
	TDZ T,T4
	LSH T1,6
	TRO T1,SINSTA(J)
	IDPB T1,T2
INI2:	JFFO T,INI3
$JBTGLU:MOVE T,JBTGLU(J)
	ANDI T,77
	LSH T,6
	TRO T,GLUSTA(J)
	IDPB T,T2
$SPWGO:	SKIPN SPWGO(J)
	JRST INI4
	LDB T,[POINT 12,@$SPWGO,23]
	ANDI T,7700
	TRO T,SPWSTA(J)
	IDPB T,T2
INI4:
$SP2GO:	SKIPN SP2GO(J)
	JRST INI5
	LDB T,[POINT 12,@$SP2GO,23]
	ANDI T,7700
	TRO T,SPWSTA+4000(J)
INI5:	HRRZ T,@$JBTSTS
	ANDI T,77
	LSH T,6
	TRO T,SEGSTA(J)
	IDPB T,T2
	MOVEI T,NAMSTA(J)
	IDPB T,T2
$JOBNAM:MOVS T,JOBNAM(J)
	IDPB T,T2
	HLRZ T,T
	IDPB T,T2
$JOBQUE:MOVM T,JOBQUE(J)
	ANDI T,77
	LSH T,6
	TRO T,QUESTA(J)
	IDPB T,T2
INI1:	CAMGE J,JOBN
	AOJA J,INI0
;INIT POINTERS
	move t,sttptr
	move t,400000(t)
	hrrzi t,1(t)
	sub t,stat
	ori t,177
	subi t,177
	add t,stat
	movem t,sttpt
	addi t,200
	move t1,stat
	add t1,sttlen
	movem t1,sttend
	setzm sttn
	camge t,t1
	jrst ints4
	aos sttn
	move t,stat
ints4:	movem t,sttyet
	move t,sttnum
	move t,400000(t)
	addm t,sttn
;INIT DONE
	movei t,1
	INTGEN T,		;TELL HIM TO GO
	DISMIS

ints1:	move t,sttptr
	hrrz t,400000(t)
	addi t,1
	camge t,sttyet
	DISMIS
	hrr t,sttnum
	move t,400000(t)
	camge t,sttn
	DISMIS
	came t,sttn
	aos lose
	hrr t,sttpt
	HRLI T,400000(T)
	hrr t,iptr
	hrrz t1,iptr
	addi t1,177
	blt t,(t1)
	movei t,200
	addb t,iptr
	caige t,buff+nbufs*200
	jrst ints2
	movei t,buff
	movem t,iptr
ints2:	aos nbufo
	movei t,1
	INTGEN T,
	move t,sttyet
	movem t,sttpt
	addi t,200
	camge t,sttend
	jrst ints3
	aos sttn
	move t,stat
ints3:	movem t,sttyet
	jrst ints1

; Data storage . . .

mones:	-1
	-1
	-1
	-1
lose:	0
sttend:	0		; First address beyond table

sttn:	0		; Trigger value of wrap-around pointer
sttpt:	0		; Last pointer to 200-wd block
sttyet:	0		; Place where pointer has to be to trigger transfer of 200-wds

nbufo:	0		; Counter of number of full buffers
iptr:	buff		; Load-up pointer
optr:	buff		; Empty pointer
buff:	block 200*nbufs
oiowd:	iowd 200,buff
	0

efile:	sixbit /STATS/
	sixbit /DAT/
	0
	0

end start